package tp.igl.View;

import javafx.animation.FadeTransition;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.scene.control.ScrollPane;
import javafx.scene.control.Tab;
import javafx.util.Duration;
import tp.igl.Reseau;

/**
 * cette classe qui hérite de la classe graphique Tab permet de créer un onglet contenant le informations d'un réseau
 * Ces informations sont les adresses suivantes: réseau, broadcast, premier hôte, dernier hôte
 * @author PNR KACIMI HACINI
 */
public class ResultTab extends Tab{
    
    private String name;
    private int base;
    private static FadeTransition ft = new FadeTransition();
                    
    
    /**
     * Génère un onglet qui contiendra un objet ResultInfo
     * @param reseau  le reseau dont on veut afficher les informations
     * @param base  la base numérique dans laquelle les adresses sont ecrites (8, 10, 16)
     * @param name   Le nom affiché en haut de l'onglet
     */
    public ResultTab(Reseau reseau,int base,String name){
        super(name);
        
        this.name=name;
        this.base=base;
        
        setClosable(false);
        
        setContent(new ReseauInfo(reseau,base,false));
        
        selectedProperty().addListener(new ChangeListener<Boolean>(){
            
            @Override
            public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
                if (t1.booleanValue()) {
                    ft.setNode(getContent());
                    ft.setDuration(Duration.millis(650));
                    ft.setFromValue(0.2);
                    ft.setToValue(1.0);
                    ft.setCycleCount(1);
                    ft.play();                    
                }
            }
        });
    }
    
    /**
     * 
     * @param subs ScrollPane contenant l'accordion dans lequel les sous reseaux sont affichés
     */
    public ResultTab(ScrollPane subs){
        super("SubNets");
        setClosable(false);
        setContent(subs);
        selectedProperty().addListener(new ChangeListener<Boolean>(){
            @Override
            public void changed(ObservableValue<? extends Boolean> ov, Boolean t, Boolean t1) {
                if (t1.booleanValue()) {
                    FadeTransition ft = new FadeTransition();
                    ft.setNode(getContent());
                    ft.setDuration(Duration.millis(650));
                    ft.setFromValue(0.2);
                    ft.setToValue(1.0);
                    ft.setCycleCount(1);
                    ft.play();                    
                }
            }
        });
    }
    
    
    /**
     * Cette methode permet de mettre à jour les informations affichées
     * @param reseau le nouveau reseau dont on veut afficher les informations
     */
    public void refresh(Reseau reseau){
        setContent(new ReseauInfo(reseau, this.base,false));
    }
}
